/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.hibuybye.dao;

import br.com.hibuybye.bean.Categoria;
import br.com.hibuybye.interfaces.CategoriaDao;
import br.com.hibuybye.util.FabricaConexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Aluno
 */
public class CategoriaDaoImp implements CategoriaDao {


    @Override
    public Object salvar(Object obj) throws Exception {
        Categoria categoria = (Categoria) obj;
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try {
            String sql = "INSERT INTO categoria (nome, quantidade, descricao) VALUES(?,?,?)";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            ps.setString(1, categoria.getNome());
            ps.setInt(2, categoria.getQuantidade());
            ps.setString(3, categoria.getDescricao());
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            rs.next();
            categoria.setId(rs.getInt(1));
        } catch (Exception e) {
            System.out.println("Erro ao salvar categoria:" + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps, rs);
        }
        return categoria;
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Categoria categoria = (Categoria) obj;
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String sql = "UPDATE categoria SET nome=?, descricao=? WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(sql);
            ps.setString(1, categoria.getNome());
            ps.setString(2, categoria.getDescricao());
            ps.setInt(3, categoria.getId());
            ps.executeUpdate();
        } catch (Exception e) {
            System.out.println("Erro alterar categoria" + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }

    }

    @Override
    public void excluir(int id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String sql = "DELETE FROM categoria WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (Exception e) {
            System.out.println("Erro ao deletar categoria: " + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Categoria categoria = null;
        try {
            String sql = "SELECT * FROM categoria WHERE id = ?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(sql);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setNome(rs.getString("nome"));
                categoria.setQuantidade(rs.getInt("quantidade"));
                categoria.setDescricao(rs.getString("descricao"));
            }
        } catch (Exception e) {
            System.out.println("Erro ao procurar categoria: " + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps, rs);
        }
        return categoria;
    }

    @Override
    public List<Object> listar() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Categoria categoria = null;
        List categorias = new ArrayList();
        try {
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement("SELECT * FROM categoria");
            rs = ps.executeQuery();
            
            while(rs.next()){
                categoria = new Categoria();
                categoria.setId(rs.getInt("id"));
                categoria.setNome(rs.getString("nome"));
                categoria.setDescricao(rs.getString("descricao"));
                categoria.setQuantidade(rs.getInt("quantidade"));
                categorias.add(categoria);
            }
        } catch (Exception e) {
            System.out.println("Erro ao listar categoria: " + e.getMessage());
        }finally{
            FabricaConexao.fechaConexao(conn, ps, rs);
        }
        return categorias;
    }

    @Override
    public List<Categoria> pesquisaporNome(Object obj) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
